<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div id="app">
    <router-link to='./home'>主页</router-link>
    <router-link to='./product/123'>产品详情1</router-link>
    <router-link to='./product/456'>产品详情2</router-link>
    <router-view></router-view>
  </div>
</body>
<script src="./node_modules/vue/dist/vue.js"></script>
<script src="./node_modules/vue-router/dist/vue-router.js"></script>
<script>
  let routes = [{
      path: "/home",
      beforeEach: (to, from, next) => {
        console.log("home 路由的导航守卫")
        next();
      },
      component: () => Promise.resolve({
        template: `<h1>主页</h1>`,
        // 路由进入之前
        beforeRouteEnter(to, from, next) {
          console.log("组件导航守卫 进入到主页详情的路由");
          //console.log(this); //=>  undefined 现在还不可以访问到 实例
          next();
        },
        // 路由更新的时候
        // product/123 => product/456
        beforeRouteUpdate(to, from, next) {
          console.log("组件导航守卫 主页 路由更新的时候");
          //console.log(this); // => 产品详情组件
          next();
        },
        // 路由离开的时候
        beforeRouteLeave(to, from, next) {
          console.log("组件导航守卫 离开 /home 路由");
          //console.log("现在的路由", from);
          //console.log("前往的路由", to);
          //console.log(this);
          next();
        },
      }),
    },
    {
      path: "/product/:productId",
      beforeEach: (to, from, next) => {
        console.log("/product 路由的导航守卫")
      },
      component: () => import("./product.js")
    }
  ];

  let router = new VueRouter({
      routes
    });
    // 1.全局前置导航守卫
    router.beforeEach((to, from, next) => {
      console.log("执行 全局的 前置的导航守卫")
      next();
    });

  let vm = new Vue({
    router,
    el: "#app",
  });
</script>

</html>